// Definition of the Socket class

#ifndef Socket_class
#define Socket_class

#include <iostream>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <unistd.h>
#include <string>
#include <arpa/inet.h>

using namespace std;
using std::string;

const int MAXHOSTNAME = 200;
const int MAXCONNECTIONS = 200;//DEFAULT = 5
const int MAXRECV = 500;
//const int MSG_NOSIGNAL = 0; // defined by dgame

class MySocket {
public:
    MySocket();
    virtual ~MySocket();

    // Server initialization
    bool create();
    bool bind(const int port);
    bool listen() const;
    bool accept(MySocket&) const;

    // Client initialization
    bool connect(const std::string host, const int port);

    // Data Transimission
    bool send(const std::string) const;
    int recv(std::string&) const;


    void set_non_blocking(const bool);

    bool is_valid() const {
        return m_sock != -1;
    }

private:

    int m_sock;
    sockaddr_in m_addr;


};


#endif
